#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>

void *thread_function (void *arg);
int run_now = 1;
char message[] = "hello world!";
int
main ()
{
  int res;
  pthread_t a_thread;
  void *thread_result;
  int print_count1 = 0;
  res = pthread_create (&a_thread, NULL, thread_function, (void *) message);

  if (res != 0)
    {
      perror ("thread creation failed!");
      exit (EXIT_FAILURE);

    }
  printf ("waiting for thread to finish...\n");
       while(print_count1++ < 20)
  {
    if(run_now == 1) 
    {
        printf("1"); 
        run_now = 2;
    }
    else
      sleep(1);
  }
  printf("\n");
  res = pthread_join (a_thread, &thread_result);//it will not return until other thread return!
  if (res != 0)
    {
      perror ("thread join failed!");
      exit (EXIT_FAILURE);
    }

    
  printf ("thread jioned, it returned %s\n", (char *) thread_result);
  printf ("message is now %s\n", message);
  exit (EXIT_SUCCESS);
}

void *thread_function(void *arg)
{

int print_count2 = 0;
  while(print_count2++ < 20)
  {
    if(run_now == 2) 
    {
        printf("2"); 
        run_now = 1;
    }
    else
      sleep(1);
  }
    printf("thread_function is running.Argument was %s\n", (char *)arg);
    sleep(3);
    strcpy(message, "Bye!");
    pthread_exit("Thank you for the cpu time!");
}
